// $Id: MessageSelectionPanel.java,v 1.5 2003/10/07 21:45:58 idgay Exp $

/*									tab:4
 * "Copyright (c) 2000-2003 The Regents of the University  of California.  
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 * 
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 * Copyright (c) 2002-2003 Intel Corporation
 * All rights reserved.
 *
 * This file is distributed under the terms in the attached INTEL-LICENSE     
 * file. If you do not find these files, copies can be found by writing to
 * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
 * 94704.  Attention:  Intel License Inquiry.
 */
/* Authors:  Philip Levis  <pal@cs.berkeley.edu>
 *
 */

/**
 * MessagePanel is a swing panel representing a TinyOS message type:
 * message fields can be viewed and edited.
 * @author Philip Levis <pal@cs.berkeley.edu>
 */

package tools.message;

import java.awt.*;
import java.lang.reflect.*;
import java.util.*;
import javax.swing.*;
import javax.swing.text.*;
import tools.util.TinyLook;

public class MessageSelectionPanel extends JPanel {
	private MessageSelection selection;
	private JTabbedPane pane;

	public MessageSelectionPanel() {
		super();
		try {
			selection = new MessageSelection();
			pane = new JTabbedPane(JTabbedPane.LEFT);
			pane.setFont(TinyLook.smallFont());
			addPackets();
			add(pane);
			pane.setAlignmentX(LEFT_ALIGNMENT);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public MessageSelectionPanel(MessageSelection selection) {
		super();
		try {
			this.selection = selection;
			pane = new JTabbedPane(JTabbedPane.LEFT);
			addPackets();
			add(pane);
			pane.setAlignmentX(LEFT_ALIGNMENT);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Message getMessage() throws Exception {
		MessagePanel p = (MessagePanel) pane.getSelectedComponent();
		return p.getMessage();
	}

	private void addPackets() throws Exception {
		Message[] messages = selection.messages();
		for (int i = 0; i < messages.length; i++) {
			MessagePanel panel = new MessagePanel(messages[i]);
			String name = messages[i].getClass().getName();
			panel.setFont(TinyLook.constFont());
			name = name.substring(name.lastIndexOf('.') + 1);
			pane.add(panel, name);
		}
	}

	public static void main(String[] args) {
		try {
			MessageSelectionPanel panel = new MessageSelectionPanel();
			JFrame frame = new JFrame();
			JScrollPane pane = new JScrollPane(panel);
			frame.getContentPane().add(pane);
			Dimension size = pane.getPreferredSize();
			if (size.getHeight() > 380) {
				size.setSize(size.getWidth(), 400);
			} else {
				size.setSize(size.getWidth(), size.getHeight() + 20);
			}
			if (size.getWidth() > 980) {
				size.setSize(1000, size.getHeight());
			} else {
				size.setSize(size.getWidth() + 20, size.getHeight());
			}
			pane.setPreferredSize(size);
			frame.pack();
			frame.setVisible(true);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
